//qsort函数的使用代码

#define _CRT_SECURE_NO_WARNINGS 1

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

//比较两个整数的大小。
int int_cmp(const void* p1, const void* p2)
{
	return *(int*)p1 - *(int*)p2;   //因为void是为空，直接解引用访问的话会出现非法访问的效果。所以要把p1，p2，强制类型转化为（int*）
}                                   //因为我们的数组是int类型，所以转为int*，

int main()
{
	int arr[10] = { 5,9,4,3,1,6,7,8,2,0 };
	qsort(arr, sizeof(arr) / sizeof(int), sizeof(int), int_cmp);    //qsort是库函数，头文件<stdlib .h>。
	for (int i = 0; i < sizeof(arr) / sizeof(int); i++)             //qsort函数的参数为（void* base，数组中元素的个数，数组的类型（占多少字节），自己编辑的函数）
	{
		printf("%d", arr[i]);
	}
	return 0;
}

struct Stu
{
	char name[20];
	int age;
};   //结构体要加分号“：”
//比较结构体中两个整数的大小
int int_cmp(const void* p1, const void* p2)
{
	return ((struct Stu*)p1)->age - ((struct Stu*)p2)->age;     //强制转化为struct Stu*类型的变量。
}

//int int_cmp(const void* p1, const void* p2)
//{
//	//比较结构体中两个字符串的大小。用strcmp函数实现，头文件是string.h
//	return strcmp(((struct Stu*)p1)->name, ((struct Stu*)p2)->name);
//}

int main()
{
	struct Stu arr[] = {{"zhangsan", 20},{"lisi", 30},{"wangwu", 40}};
	int sz = sizeof(arr) / sizeof(arr[0]);
	qsort(arr, sz, sizeof(arr[0]), int_cmp);
	//打印结构体中的成员，且用for循环时 ：arr[i].结构体成员。如果是指针的话 ：arr[i]->结构体成员。
	for (int i = 0; i < sz; i++)
	{
		printf("%s ", arr[i].age);
	}
	return 0;
}







